package com.moonLight.weblog.common.domain.mapper;


import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.moonLight.weblog.common.config.InsertBatchMapper;
import com.moonLight.weblog.common.domain.dos.TArticleTagRelDo;

import java.util.List;

/*
文章-标签关联关系的 Mapper 就拥有的真实的批量插入功能了 继承自定义的Mapper InsertBatchMapper
 */
public interface TArticleTagMapper extends InsertBatchMapper<TArticleTagRelDo> {
    /**
     * 根据文章 ID 删除关联记录
     * @param articleId
     * @return
     */
    default int deleteByArticleId(Long articleId) {
        return delete(Wrappers.<TArticleTagRelDo>lambdaQuery()
                .eq(TArticleTagRelDo::getArticleId, articleId));
    }

    /**
     * 根据文章 ID 来查询文章的标签
     * @param articleId
     * @return
     */
    default List<TArticleTagRelDo> selectByArticleId(Long articleId) {
        return selectList(Wrappers.<TArticleTagRelDo>lambdaQuery()
                .eq(TArticleTagRelDo::getArticleId, articleId));
    }
    /**
     * 根据标签 ID 查询  用途删除校验的时候
     * @param tagId
     * @return
     */
    default TArticleTagRelDo selectOneByTagId(Long tagId) {
        return selectOne(Wrappers.<TArticleTagRelDo>lambdaQuery()
                .eq(TArticleTagRelDo::getTagId, tagId)
                .last("LIMIT 1"));
    }

    /**
     * 根据文章 ID 集合批量查询
     * @param articleIds
     * @return
     */
    default List<TArticleTagRelDo> selectByArticleIds(List<Long> articleIds) {
        return selectList(Wrappers.<TArticleTagRelDo>lambdaQuery()
                .in(TArticleTagRelDo::getArticleId, articleIds));
    }

    /**
     * 查询该标签 ID 下所有关联记录
     * @param tagId
     * @return
     */
    default List<TArticleTagRelDo> selectByTagId(Long tagId) {
        return selectList(Wrappers.<TArticleTagRelDo>lambdaQuery()
                .eq(TArticleTagRelDo::getTagId, tagId));
    }
}
